﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using System.Text;
using DTO;
using BUS;
using System.Net.Mail;
using System.Net;

namespace NGU
{
    public partial class DangKy : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //this.sendEmail("hathao", "/Activate.aspx?id=thao", "hathao298@gmail.com");
            if (Session["ID"] != null)
            {
                Response.Redirect("/Default.aspx");
            }
            this.id_number.MaxLength = 10;
            this.name.MaxLength = 50;
            this.bank_account.MaxLength = 20;
            this.password.MaxLength = 30;
        }

        /// <summary>
        /// Kiem tra su hop le cua cac control
        /// </summary>
        /// <returns>Error_type</returns>
        private bool checkValidation()
        {            
            if (this.name.Value.Trim() == "")
            {
                this.error.InnerHtml = "Thông tin họ và tên sai. Mời bạn nhập lại";
                this.name.Value = "";
                return false;
            }
            if (this.email.Value.Trim() == "")
            {
                this.error.InnerHtml = "Thông tin email sai. Mời bạn nhập lại";
                this.email.Value = "";
                return false;
            }
            string regEx = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
            Match match = Regex.Match(this.email.Value.Trim(), regEx, RegexOptions.IgnoreCase);
            if (!match.Success)
            {
                this.error.InnerHtml = "Thông tin email sai. Mời bạn nhập lại";
                this.email.Value = "";
                return false;
            }

            string un = this.username.Value.Trim();
            if (un == "" || un.Length <3)
            {                
                this.error.InnerHtml = "Thông tin tên đăng nhập sai. Mời bạn nhập lại";
                this.username.Value = "";
                return false;
            }

            match = Regex.Match(un, "^[0-9]|[a-z]|[A-Z]$", RegexOptions.IgnoreCase);
            if (!match.Success || un.Contains(" ")== true)
            {
                this.error.InnerHtml = "Thông tin tên đăng nhập không được có ký tự đặc biệt hoặc dấu cách. Mời bạn nhập lại";
                this.username.Value = "";
                return false;
            }


            if (this.password.Value.Trim() == "" || this.password.Value.Trim().Length <6)
            {
                this.error.InnerHtml = "Thông tin mật khẩu sai. Mời bạn nhập lại";                
                return false;
            }
            
            //thong tin bo sung
            string idNumber = this.id_number.Value.Trim();
            string phone = this.phone.Value.Trim();
            string bankAccount = this.bank_account.Value.Trim();
            if (idNumber != "" && !this.isNumber(idNumber))
            {
                this.error.InnerHtml = "Thông tin số CMND sai. Mời bạn nhập lại";
                this.id_number.Value = "";
                return false;
            }
            if (phone != "" && phone.Length < 6)
            {
                this.error.InnerHtml = "Thông tin số điện thoại sai. Mời bạn nhập lại";
                this.phone.Value = "";
                return false;
            }
            if (bankAccount != "" && !this.isNumber(bankAccount))
            {
                this.error.InnerHtml = "Thông tin tài khoản ngân hàng sai. Mời bạn nhập lại";
                this.bank_account.Value = "";
                return false;
            }
            if (this.password.Value != this.reenter_password.Value)
            {
                this.error.InnerHtml = "Mật khẩu nhập lại không trùng khớp. Mời bạn nhập lại";
                return false;
            }
            return true;
        }

        protected void register_Click(object sender, EventArgs e)
        {
            //check input 
            if (!this.checkValidation())
            {
                this.password.Value = "";
                this.reenter_password.Value = "";
                return;
            }

            //check tai khoan da ton tai trong he thong chua
            TaiKhoanBUS bus = new TaiKhoanBUS();
            TaiKhoanDTO tkCheck = bus.layThongTinTaiKhoan(this.username.Value.Trim());
            if(tkCheck != null)
            {
                this.error.InnerHtml = "Tên đăng nhập này đã tồn tại. Mời bạn nhập lại";
                this.username.Value = "";
                return;
            }

            //lay thong tin va them vao co so du lieu
            TaiKhoanDTO tk = new TaiKhoanDTO();
            tk.Username = this.username.Value.Trim().ToLower();
            tk.Password = this.password.Value;
            tk.TrangThai = 0;
            KhachHangDTO kh = new KhachHangDTO();
            kh.HoTen = this.name.Value.Trim();
            kh.CMND = this.id_number.Value.Trim();
            kh.DiaChi = this.address.Value.Trim();
            kh.Email = this.email.Value.Trim();
            kh.SDT = this.phone.Value.Trim();
            kh.MaSoThe = this.bank_account.Value.Trim();
            kh.LoaiThe = this.cardtype.Value;
            bool res = bus.dangKyTaiKhoanMoi(tk, kh);
            if(!res)
            {
                Response.Redirect("/InfoPage.aspx?action=error&type=unknown");
            }

            //generate ma de activate tai khoan
            string id = bus.getMD5(tk.Username + bus.getMD5(this.password.Value));
            string activationLink = "/Activate.aspx?user=" + tk.Username + "&id=" + id;
            // send email
            this.sendEmail(tk.Username,activationLink, kh.Email);
            // la duong link phu trach activate tai khoan

            Response.Redirect("/InfoPage.aspx?action=succeed&type=account_registration");
        }

        private bool isNumber(string str)
        {
            for(int i =0; i< str.Length; i++)
            {
                if(!(str[i] >= '0' && str[i] <= '9'))
                    return false;                    
            }
            return true;
        }

        private bool sendEmail(string username, string activationLink, string email)
        {
            // System.Web.Mail.SmtpMail.SmtpServer is obsolete in 2.0
            // System.Net.Mail.SmtpClient is the alternate class for this in 2.0
            SmtpClient smtpClient = new SmtpClient();
            MailMessage message = new MailMessage();
            smtpClient.EnableSsl = true;
            smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;

            try
            {
                MailAddress fromAddress = new MailAddress("jml207.agent@gmail.com", "JML Agent");

                // You can specify the host name or ipaddress of your server
                // Default in IIS will be localhost 
                smtpClient.Host = "smtp.gmail.com";

                //Default port will be 25
                smtpClient.Port = 587;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials = new NetworkCredential("jml207.agent", "jml123456");
                

                //From address will be given as a MailAddress Object
                message.From = fromAddress;

                // To address collection of MailAddress
                message.To.Add(email);
                message.Subject = "Kích hoạt tài khoản đại lý du lịch JML Agent";
                

                //Body can be Html or text format
                //Specify true if it  is html message
                message.IsBodyHtml = false;

                // Message body content
                message.Body = "Chào " + this.username.Value + ", \nMời bạn bấm vào link bên dưới để kích hoạt tài khoản của bạn tại đại lý du lịch JML Agent"
                                + "\n"
                                + "Link kích hoạt: http://ngu.somee.com" + activationLink;

                // Send SMTP mail
                smtpClient.Send(message);
                return true;
            }
            catch (Exception ex)
            {
                Response.Redirect("/InfoPage.aspx?action=error&type=send_activationmail&activate=" + activationLink);
                return false;
            }
        }
    }
}